/*******************************************************************************
* Copyright (c) 2012-2016 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.ext.java.jdi.client.marshaller;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import org.eclipse.che.ide.commons.exception.UnmarshallerException;
import org.eclipse.che.ide.dto.DtoFactory;
import org.eclipse.che.ide.ext.java.jdi.shared.BreakPointEvent;
import org.eclipse.che.ide.ext.java.jdi.shared.BreakpointActivatedEvent;
import org.eclipse.che.ide.ext.java.jdi.shared.DebuggerEvent;
import org.eclipse.che.ide.ext.java.jdi.shared.DebuggerEventList;
import org.eclipse.che.ide.ext.java.jdi.shared.StepEvent;
import org.eclipse.che.ide.websocket.Message;
import org.eclipse.che.ide.websocket.rest.Unmarshallable;
import java.util.ArrayList;
/**
* Unmarshaller for deserializing debugger event list, which is received over WebSocket connection.
*
* @author Artem Zatsarynnyi
*/
public class DebuggerEventListUnmarshallerWS implements Unmarshallable<DebuggerEventList> {
private DtoFactory dtoFactory;
private DebuggerEventList events;
public DebuggerEventListUnmarshallerWS(DtoFactory dtoFactory) {
this.dtoFactory = dtoFactory;
this.events = dtoFactory.createDto(DebuggerEventList.class);
}
/** {@inheritDoc} */
@Override
public void unmarshal(Message response) throws UnmarshallerException {
this.events.setEvents(new ArrayList<DebuggerEvent>());
JSONObject jsonObject = JSONParser.parseStrict(response.getBody()).isObject();
if (jsonObject == null) {
return;
}
if (jsonObject.containsKey("events")) {
JSONArray events = jsonObject.get("events").isArray();
for (int i = 0; i < events.size(); i++) {
JSONObject event = events.get(i).isObject();
if (event.containsKey("type")) {
final int type = (int)event.get("type").isNumber().doubleValue();
if (DebuggerEvent.BREAKPOINT == type) {
BreakPointEvent breakPointEvent = dtoFactory.createDtoFromJson(event.toString(), BreakPointEvent.class);
this.events.getEvents().add(breakPointEvent);
} else if (DebuggerEvent.STEP == type) {
StepEvent stepEvent = dtoFactory.createDtoFromJson(event.toString(), StepEvent.class);
this.events.getEvents().add(stepEvent);
} else if (DebuggerEvent.BREAKPOINT_ACTIVATED == type) {
BreakpointActivatedEvent breakpointActivatedEvent =
dtoFactory.createDtoFromJson(event.toString(), BreakpointActivatedEvent.class);
this.events.getEvents().add(breakpointActivatedEvent);
}
}
}
}
}
/** {@inheritDoc} */
@Override
public DebuggerEventList getPayload() {
return events;
}
}